const MyPromise = require('../MyPromise')

let promise = new MyPromise((resolve, reject) => {
    // setTimeout(() => {
    //     resolve('成功')
    // }, 2000)
    // throw new Error('捕获错误' )
    resolve('成功')
    // reject('失败')
})

// 5. 异步函数
// promise.then(value => { // 如果执行器里面的是异步代码，那么会马上进入then方法。
//     console.log(value)
// }, reason => {
//     console.log(reason)
// })

// 6. 同一个promise对象的then可以多次调用，所有的回调都要执行
// promise.then(value => {
//     console.log(1)
//     console.log(value)
// })
// promise.then(value => {
//     console.log(2)
//
//     console.log(value)
// })
// promise.then(value => {
//     console.log(3)
//     console.log(value)
// })

// 7.then 的链式调用，
// 1. 链式调用 2. 上一个then的回调函数的返回值 传给下一个then的回调函数
// function other() {
//     return new MyPromise((resolve, reject) => {
//         resolve('other')
//     })
// }
// promise.then(value => {
//     console.log(value)
//     return other()
// }).then(value => {
//     console.log(value)
// })
// 8 循环调用自己报错
// let p1 = promise.then(value => {
//     console.log(value)
//     return p1
// })
//
// p1.then(value => {
//     console.log(value)
// }, reason => {
//     console.log(reason)
// })


// 9 捕获错无
// promise.then(value => {
//     console.log(value)
//     // throw new Error('then error')
//     return 'aaa'
// }, reason => {
//     console.log(reason)
//     return 1000
// }).then(value => {
//     console.log(value)
// })

// 10. then可选参数
// promise.then().then().then(value => {
//     console.log(value)
// }, reason => {
//     console.log(reason)
// })


// Promise.all
function p1() {
    return new MyPromise((resolve, reject) => {
        setTimeout(() => {
            resolve('p1')
        }, 2000)
    })
}
const p2 = new MyPromise((resolve, reject) => {
    // setTimeout(() => {
    //     resolve('p2')
    // }, 2000)
    resolve('p2')
    // reject('p2 reject')
})
// const arr = ['a', 'b', p1(), p2, 'c']
//
//
// MyPromise.all(arr).then(result => {
//     console.log(result, 'result')
// })
//Promise.resolve
// MyPromise.resolve(100).then(value => console.log(value))
// MyPromise.resolve(p2).then(value => console.log(value))
// p2.finally(() => {
//     console.log('finally')
//     return p1()
// }).then(value => {
//     console.log(value)
// }, reason => {
//     console.log(reason)
// })


// catch
promise.then(value => {
    console.log(value)
}).catch(reason => {
    console.log(reason)
})
